package main

import "fmt"

type typeTest struct {
	text string
}

func main() {
	var a = 1 << 10

	fmt.Printf("var a = 1 << 10\n")
	// %T 查看类型
	// %% 转义%
	fmt.Printf("类型 %%T => %T\n", a)

	// %b 输出二进制
	fmt.Printf("二进制 %%b: %b\t", a)
	// %o 输出八进制
	fmt.Printf("八进制 %%o: %o\t", a)
	// %d 输出十进制
	fmt.Printf("十进制 %%d: %d\t", a)
	// %x 输出十六进制
	fmt.Printf("十六进制 %%x: %x\n", a)

	fmt.Println("=========================================================")

	var b float64 = 1.0 << 10
	fmt.Printf("var b float64 = 1.0 << 10\n")
	fmt.Printf("类型 %%T => %T\n", b)
	// %e		科学计数法，例如 -1234.456e+78
	// %E		科学计数法，例如 -1234.56E+78
	fmt.Printf("科学计数法 %%e: %e\t", b)
	// %f		有小数点而无指数，例如 123.4556
	fmt.Printf("浮点数 %%f: %f\t", b)
	// %g		根据情况选择 %e 或 %f 以产生更紧凑的输出
	// %G		根据情况选择 %E 或 %f 以产生更紧凑的输出
	fmt.Printf("自动选择 %%e 或 %%f %%g: %g\n", b)

	fmt.Println("=========================================================")

	var s = "text"
	fmt.Printf("var s = \"text\"\n")
	fmt.Printf("类型 %%T => %T\n", s)
	// %s 输出字符串
	fmt.Printf("字符串 %%s: %s\n", s)

	fmt.Println("=========================================================")

	var t = typeTest{text: s}
	fmt.Printf("var t = typeTest{text: s}\n")
	fmt.Printf("类型 %%T => %T\n", t)
	// %v	按默认格式输出
	fmt.Printf("按默认格式输出 %%v: %v\t", t)
	// %+v	在%v的基础上额外输出字段名
	fmt.Printf("在%%v的基础上额外输出字段名 字符串 %%+v: %+v\t", t)
	// %#v	在%+v的基础上额外输出类型名
	fmt.Printf("在%%+v的基础上额外输出类型名 %%#v: %#v\t", t)
}
